package cn.hinglo.gameclaw.client.dao;

import cn.hinglo.gameclaw.data.dbdao.MyMapper;
import cn.hinglo.gameclaw.user.bean.Invitation;
import cn.hinglo.gameclaw.user.bean.UserInfo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @createTime: 2018/1/18
 * @author: HingLo
 * @description: 邀请码相关
 */
@Repository
public interface InvitationDao extends MyMapper<Invitation> {
    /**
     * 通过用户Id 查询用户的信息
     *
     * @param userId 用户唯一ID
     * @return 操作结果
     */
    @Select("select * from user_info where user_id=#{userId}")
    UserInfo findByIdUserInfoDao(String userId);

    /**
     * 通过用户的邀请码来查询用户的信息
     *
     * @param uid 用户的邀请码/用户Id
     * @return 操作结果
     */
    @Select("select * from user_info where uid = #{uid}")
    UserInfo findByCodeUserInfoDao(String uid);

    /**
     * 填写邀请码
     *
     * @param code   用户填写的邀请码
     * @param gold   赠送的钻石数量
     * @param userId 用户唯一ID
     * @return 操作结果
     */
    @Update("update user_info set give_gold=give_gold + #{gold} ,fill_code=#{code} where user_id=#{userId} ")
    int updateUserInfoCodeDao(@Param("gold") Integer gold, @Param("code") String code, @Param("userId") String userId);

    /**
     * 通过邀请码查询全部的填写了该邀请码的信息
     *
     * @param uid 邀请码/用户uid
     * @return 操作结果
     */
    @Select("select u.id,uf.uid,u.type,u.status,u.date,uf.gold,give_gold,uf.score,uf.nike_name,uf.fill_Code from user as u ,user_info as uf where u.id=uf.user_id and user_id in (select user_id from invitation where code=#{uid}) ")
    List<cn.hinglo.gameclaw.admin.entity.UserInfo> listInvitationDao(String uid);

    /**
     * 用户通过自己的用户Id来查询自己的邀请码填写的记录
     *
     * @param userId 用户的Id
     * @return 返回填写了该用户邀请码的用户名的集合
     */
    @Select("select username  from user where id in ( select invitation.user_id from user_info as uf, invitation where invitation.code= uf.uid and uf.user_id=#{userId})")
    List<String> listDao(String userId);

    /**
     * 统计该用户的邀请吗被填写后赠送的金币总量
     *
     * @param userId 用户Id
     * @return 钻石总量
     */
    @Select("select sum(invitation.gold) as num from user_info as uf, invitation where invitation.code= uf.uid and uf.user_id=#{userId}")
    Integer countDao(String userId);

    /**
     * 修改邀请码隶属人的钻石数量
     *
     * @param gold   赠送的钻石数量
     * @param userId 邀请人的隶属人
     * @return 是否修改成功
     */
    @Update("update user_info set give_gold=give_gold + #{gold} where user_id=#{userId}")
    int updateUserGiveGoldDao(@Param("gold") Integer gold, @Param("userId") String userId);
}
